package gjbsh.bangong.ds.service;

import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.UUID;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import gjbsh.bangong.ds.dao.权限模块分配表Mapper;
import gjbsh.bangong.ds.model.权限模块分配表;
import gjbsh.bangong.ds.model.权限模块分配表Example;

/**
 * @author yaolongjun
 * @date   2020年5月22日 下午2:46:43
 */
@Service
public class 权限模块分配表Service {
	
	@Autowired
	权限模块分配表Mapper ddMapper;
	
	@Autowired
	权限用户角色Service dd权限用户角色Service;

	// 取用户模块
	public List<Map<String, Object>> findUserMoudleByUserId(String ppUserId) {
		return ddMapper.findUserMoudleByUserId(ppUserId);
	}

	// 取角色模块
	public List<Map<String, Object>> findJueseMoudleByUserId(String ppUserId) {
		return ddMapper.findJueseMoudleByUserId(ppUserId);
	}

	// 保存用户模块
	@Transactional
	public boolean saveUserMoudle(String ppUserId, String ppMoudleids) {
		
		String[] mmMoudleIdArr = ppMoudleids.split(",");
		// 新模块ID list
		List<String> mmMoudleIdList = Arrays.asList(mmMoudleIdArr);
		
		// 删除权限_用户_角色
		if(dd权限用户角色Service.findByUserId(ppUserId).size() > 0) {
			if(!dd权限用户角色Service.deleteByUserId(ppUserId)) {
				throw new RuntimeException("删除权限用户角色失败");
			}
		}
		
		// 删除权限_模块分配表中外键为用户ID的数据
		if(findUserMoudleByUserId(ppUserId).size() > 0) {
			if(!deleteByUserId(ppUserId)) {
				throw new RuntimeException("删除权限_模块分配失败");
			}
		}
		
		for(int i = 0; i < mmMoudleIdList.size(); i++) {
			String mmMoudleId = mmMoudleIdList.get(i);
			if(!"".equals(mmMoudleId)) {
				权限模块分配表 mm权限模块分配表 = new 权限模块分配表();
				mm权限模块分配表.set模块分配id(UUID.randomUUID().toString());
				mm权限模块分配表.set类型("User");
				mm权限模块分配表.set外键id(ppUserId);
				mm权限模块分配表.set模块id(mmMoudleId);
				if(!add(mm权限模块分配表)) {
					throw new RuntimeException("增加权限模块分配表失败");
				}
			}
		}
		
		return true;
	}

	// 新增
	public boolean add(权限模块分配表 mm权限模块分配表) {
		return ddMapper.insert(mm权限模块分配表) == 1;
	}

	// 根据userid删除
	public boolean deleteByUserId(String ppUserId) {
		权限模块分配表Example mmExample = new 权限模块分配表Example();
		权限模块分配表Example.Criteria criteria = mmExample.createCriteria();
		criteria.and外键idEqualTo(ppUserId);
		return ddMapper.deleteByExample(mmExample) > 0;
	}
	
	

}
